// 配置路由器步骤总共就三步：①创建路由器文件②在入口文件中引入③应用路由器
const express = require('express');
const sha1 = require('sha1');
// 引入模型对象
const Users = require('../models/users');
const router = new express.Router();
// 查看用户名和密码是否符合规则
// 定义规则：用户名user_name：以字母开头，字母 数字 下划线 用户名长度：3-20
// 密码password规则：数字字母下划线 密码长度：4-15
const user_name_reg = /^[A-Za-z][A-Za-z0-9_]{2,19}$/
const password_reg = /^[A-Za-z0-9_]{4,15}$/

//注册 登录 修改密码  删除密码
// 注册
router.post('/register',async(req,res)=>{
    // 收集用户名和密码
    console.log(req.body);
    let {user_name,password} = req.body;
    
    // console.log(user_name_reg.test(user_name));
    if(user_name_reg.test(user_name)&&password_reg.test(password)){
        // 当符合规则，将其存放到数据库当中
        // 步骤
        // ①查看数据库和服务器是否连接 有db文件，有引入 ，使用async await 确保数据库连接成功，没有建立
        // 存储数据要看是否有对应的集合直接使用，没有创建

        // 一般常说的加密方法有sha1 MD5加密方式
        // 没有加密过的称为明文  加密过的称为密文
        try{
            // let user = {};
            // user.user_name = sha1(user_name);
            // user.password = sha1(password);
            // console.log(user_name,password);

            // await Users.create(user);
            await Users.create(req.body);
            res.send('注册成功！！')
        }catch(e){
            console.log(e);
            res.send('网络延迟，请重新注册！！')
        }
    }else{
        res.send('用户名和密码不符合规则，请求重新注册！！');
    }
})
// 登录
router.post('/login',async(req,res)=>{
    const {user_name,password} = req.body;
    if(user_name_reg.test(user_name) && password_reg.test(password)){
        // 符合规则后，从数据库中根据用户名查询对应的密码，如果有 匹配密码是否一致，一致登录成功，不一致登录失败  如果没有 该用户不存在，请注册
        try{
            const user =await Users.findOne({user_name});
            // user有两类 一类是查询到的用户名密码一类是null
            if(user){
                if(user.password == password){
                    res.send('登录成功！！');
                }else{
                    res.send('密码错误！！')
                }
            }else{
                res.send('该用户不存在，请注册！！')
            }
        }catch(e){
            console.log(e);
            res.send('网络延迟！！')
        }
    }else{
        res.send('用户名和密码不符合规则！！')
    }
})
// 修改密码 方案一 通过post发送
router.post('/editPost',async(req,res)=>{
    console.log(req.body);
    try{
         // Users这个模型对象中更新 updateOne
        // 修改密码 ：一个用户名 第二个是新密码
        const result =await Users.updateOne({user_name:req.body.user_name},{$set:{password:req.body.password}});
        console.log(result);
        res.send('修改密码成功')
    }catch(e){
        console.log(e);
        res.send('网络延迟');
    }
})

// 修改密码不建议使用get 不安全
// 修改密码的方法二
router.get('/editQuery',async(req,res)=>{
    // 通过get请求的query参数获取用户名和新密码
    // ?key=value&key=value
    console.log(req.query);

    try{
        // Users这个模型对象中更新 updateOne
       // 修改密码 ：一个用户名 第二个是新密码
       const result =await Users.updateOne({user_name:req.query.user_name},{$set:{password:req.query.password}});
       console.log(result);
       res.send('修改密码成功')
   }catch(e){
       console.log(e);
       res.send('网络延迟');
   }
})
// get请求的params
router.get('/editParams/:user_name/:password',async(req,res)=>{
    console.log(req.params);
    try{
        // Users这个模型对象中更新 updateOne
       // 修改密码 ：一个用户名 第二个是新密码
       const result =await Users.updateOne({user_name:req.params.user_name},{$set:{password:req.params.password}});
       console.log(result);
       res.send('修改密码成功')
    }catch(e){
        console.log(e);
        res.send('网络延迟');
    }
})
// 删除密码
router.get('/del',async(req,res)=>{
    console.log(req.query);
    try{
        const result =await Users.deleteOne({user_name:req.query.user_name});
        console.log(result);
        res.send('删除成功！！');
    }catch(e){
        console.log(e);
        res.send('网络延迟')
    }
   
})

module.exports = router;